Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Christofides algorithm</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Christofides_algorithm"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.math.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Christofides_algorithm rootpage-Christofides_algorithm skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Christofides algorithm</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p>
The <b>Christofides algorithm</b> or <b>Christofides–Serdyukov algorithm</b> is an <a href="Algorithm" title="Algorithm">algorithm</a> for finding approximate solutions to the <a href="Travelling_salesman_problem" title="Travelling salesman problem">travelling salesman problem</a>, on instances where the distances form a <a href="Metric_space" title="Metric space">metric space</a> (they are symmetric and obey the <a href="Triangle_inequality" title="Triangle inequality">triangle inequality</a>).<sup id="cite_ref-gt_1-0" class="reference"><a href="#cite_note-gt-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
It is an <a href="Approximation_algorithm" title="Approximation algorithm">approximation algorithm</a> that guarantees that its solutions will be within a factor of 3/2 of the optimal solution length, and is named after <a href="Nicos_Christofides" title="Nicos Christofides">Nicos Christofides</a> and Anatoliy Serdyukov (<a href="Russian_language" title="Russian language">Russian</a>: <span lang="ru">Анатолий Иванович Сердюков</span>). Christofides published the algorithm in 1976; Serdyukov discovered it independently in 1976 but published it in 1978.<sup id="cite_ref-cri_2-0" class="reference"><a href="#cite_note-cri-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-vabe_3-0" class="reference"><a href="#cite_note-vabe-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-ser_4-0" class="reference"><a href="#cite_note-ser-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Algorithm">Algorithm</h2></div>
<p>Let <span class="texhtml"><i>G</i> = (<i>V</i>,<i>w</i>)</span> be an instance of the travelling salesman problem. That is, <span class="texhtml mvar" style="font-style:italic;">G</span> is a <a href="Complete_graph" title="Complete graph">complete graph</a> on the set <span class="texhtml mvar" style="font-style:italic;">V</span> of vertices, and the function <span class="texhtml mvar" style="font-style:italic;">w</span> assigns a nonnegative real weight to every edge of <span class="texhtml mvar" style="font-style:italic;">G</span>.
According to the triangle inequality, for every three vertices <span class="texhtml mvar" style="font-style:italic;">u</span>, <span class="texhtml mvar" style="font-style:italic;">v</span>, and <span class="texhtml mvar" style="font-style:italic;">x</span>, it should be the case that <span class="texhtml"><i>w</i>(<i>uv</i>) + <i>w</i>(<i>vx</i>) ≥ <i>w</i>(<i>ux</i>)</span>.
</p><p>Then the algorithm can be described in <a href="Pseudocode" title="Pseudocode">pseudocode</a> as follows.<sup id="cite_ref-gt_1-1" class="reference"><a href="#cite_note-gt-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<ol><li>Create a <a href="Minimum_spanning_tree" title="Minimum spanning tree">minimum spanning tree</a> <span class="texhtml mvar" style="font-style:italic;">T</span> of <span class="texhtml mvar" style="font-style:italic;">G</span>.</li>
<li>Let <span class="texhtml mvar" style="font-style:italic;">O</span> be the set of vertices with odd <a href="Degree_(graph_theory)" title="Degree (graph theory)">degree</a> in <span class="texhtml mvar" style="font-style:italic;">T</span>. By the <a href="Handshaking_lemma" title="Handshaking lemma">handshaking lemma</a>, <span class="texhtml mvar" style="font-style:italic;">O</span> has an even number of vertices.</li>
<li>Find a minimum-weight <a href="Perfect_matching" title="Perfect matching">perfect matching</a> <span class="texhtml mvar" style="font-style:italic;">M</span> in the subgraph <a href="Induced_subgraph" title="Induced subgraph">induced</a> in <span class="texhtml mvar" style="font-style:italic;">G</span> by <span class="texhtml mvar" style="font-style:italic;">O</span>.</li>
<li>Combine the edges of <span class="texhtml mvar" style="font-style:italic;">M</span> and <span class="texhtml mvar" style="font-style:italic;">T</span> to form a connected <a href="Multigraph" title="Multigraph">multigraph</a> <span class="texhtml mvar" style="font-style:italic;">H</span> in which each vertex has even degree.</li>
<li>Form an <a href="Eulerian_circuit" class="mw-redirect" title="Eulerian circuit">Eulerian circuit</a> in <span class="texhtml mvar" style="font-style:italic;">H</span>.</li>
<li>Make the circuit found in previous step into a <a href="Hamiltonian_circuit" class="mw-redirect" title="Hamiltonian circuit">Hamiltonian circuit</a> by skipping repeated vertices (<i>shortcutting</i>).</li></ol>
<p>Steps 5 and 6 do not necessarily yield only a single result; as such, the heuristic can give several different paths.
</p>
<div class="mw-heading mw-heading3"><h3 id="Computational_complexity">Computational complexity</h3></div>
<p>The worst-case complexity of the algorithm is dominated by the perfect matching step, which has <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(n^{3})}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>O</mi>
<mo stretchy="false">(</mo>
<msup>
<mi>n</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>3</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle O(n^{3})}</annotation>
</semantics>
</math></span><img src="./6b04f5c5cfea38f43406d9442387ad28555e2609.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.032ex; height:3.176ex;" alt="{\displaystyle O(n^{3})}" loading="lazy"></span> complexity.<sup id="cite_ref-cri_2-1" class="reference"><a href="#cite_note-cri-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> Serdyukov's paper claimed <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(n^{3}\log n)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>O</mi>
<mo stretchy="false">(</mo>
<msup>
<mi>n</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>3</mn>
</mrow>
</msup>
<mi>log</mi>
<mo>⁡<!-- ⁡ --></mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle O(n^{3}\log n)}</annotation>
</semantics>
</math></span><img src="./49a0ee6ea4e6d14ebcbfc3029d6d1ad09ca103f7.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:11.172ex; height:3.176ex;" alt="{\displaystyle O(n^{3}\log n)}" loading="lazy"></span> complexity,<sup id="cite_ref-ser_4-1" class="reference"><a href="#cite_note-ser-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> because the author was only aware of a less efficient perfect matching algorithm.<sup id="cite_ref-vabe_3-1" class="reference"><a href="#cite_note-vabe-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Approximation_ratio">Approximation ratio</h2></div>
<p>The cost of the solution produced by the algorithm is within <span class="texhtml">3/2</span> of the optimum.
To prove this, let <span class="texhtml mvar" style="font-style:italic;">C</span> be the optimal traveling salesman tour. Removing an edge from <span class="texhtml mvar" style="font-style:italic;">C</span> produces a spanning tree, which must have weight at least that of the minimum spanning tree, implying that <span class="texhtml"><i>w</i>(<i>T</i>) ≤ <i>w</i>(<i>C</i>)</span> - lower bound to the cost of the optimal solution.
</p><p>The algorithm addresses the problem that <span class="texhtml">T</span> is not a tour by identifying all the odd degree vertices in <span class="texhtml">T</span>; since the sum of degrees in any graph is even (by the <a href="Handshaking_lemma" title="Handshaking lemma">handshaking lemma</a>), there is an even number of such vertices. The algorithm finds a minimum-weight perfect matching <span class="texhtml">M</span> among the odd-degree ones.
</p><p>Next, number the vertices of <span class="texhtml mvar" style="font-style:italic;">O</span> in cyclic order around <span class="texhtml mvar" style="font-style:italic;">C</span>, and partition <span class="texhtml mvar" style="font-style:italic;">C</span> into two sets of paths: the ones in which the first path vertex in cyclic order has an odd number and the ones in which the first path vertex has an even number.
Each set of paths corresponds to a perfect matching of <span class="texhtml mvar" style="font-style:italic;">O</span> that matches the two endpoints of each path, and the weight of this matching is at most equal to the weight of the paths. In fact, each path endpoint will be connected to another endpoint, which also has an odd number of visits due to the nature of the tour.
</p><p>Since these two sets of paths partition the edges of <span class="texhtml mvar" style="font-style:italic;">C</span>, one of the two sets has at most half of the weight of <span class="texhtml mvar" style="font-style:italic;">C</span>, and thanks to the triangle inequality its corresponding matching has weight that is also at most half the weight of <span class="texhtml mvar" style="font-style:italic;">C</span>.
The minimum-weight perfect matching can have no larger weight, so <span class="texhtml"><i>w</i>(<i>M</i>) ≤ <i>w</i>(<i>C</i>)/2</span>.
Adding the weights of <span class="texhtml mvar" style="font-style:italic;">T</span> and <span class="texhtml mvar" style="font-style:italic;">M</span> gives the weight of the Euler tour, at most <span class="texhtml">3<i>w</i>(<i>C</i>)/2</span>. Thanks to the triangle inequality, even though the Euler tour might revisit vertices, shortcutting does not increase the weight,
so the weight of the output is also at most <span class="texhtml">3<i>w</i>(<i>C</i>)/2</span>.<sup id="cite_ref-gt_1-2" class="reference"><a href="#cite_note-gt-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Lower_bounds">Lower bounds</h2></div>
<p>There exist inputs to the travelling salesman problem that cause the Christofides algorithm to find a solution whose approximation ratio is arbitrarily close to <span class="texhtml">3/2</span>. One such class of
inputs are formed by a <a href="Path_(graph_theory)" title="Path (graph theory)">path</a> of <span class="texhtml mvar" style="font-style:italic;">n</span> vertices, with the path edges having weight <span class="texhtml">1</span>, together with a set of edges connecting vertices two steps apart in the path with weight <span class="texhtml">1 + <i>ε</i></span>
for a number <span class="texhtml"><i>ε</i></span> chosen close to zero but positive.
</p><p>All remaining edges of the complete graph have distances given by the <a href="Shortest_path_problem" title="Shortest path problem">shortest paths</a> in this subgraph.
Then the minimum spanning tree will be given by the path, of length <span class="texhtml"><i>n</i> − 1</span>, and the only two odd vertices will be the path endpoints, whose perfect matching consists of a single edge with weight approximately <span class="texhtml"><i>n</i>/2</span>.
</p><p>The union of the tree and the matching is a cycle, with no possible shortcuts, and with weight approximately <span class="texhtml">3<i>n</i>/2</span>. However, the optimal solution uses the edges of weight <span class="texhtml">1 + <i>ε</i></span> together with two weight-<span class="texhtml">1</span> edges incident to the endpoints of the path,
and has total weight <span class="texhtml">(1 + <i>ε</i>)(<i>n</i> − 2) + 2</span>, close to <span class="texhtml mvar" style="font-style:italic;">n</span> for small values of <span class="texhtml"><i>ε</i></span>. Hence we obtain an approximation ratio of 3/2.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Example">Example</h2></div>
<table class="wikitable">

<tbody><tr>
<td><span typeof="mw:File"></span></td>
<td>Given: complete graph whose edge weights obey the triangle inequality
</td></tr>
<tr>
<td><span typeof="mw:File"></span></td>
<td>Calculate <a href="Minimum_spanning_tree" title="Minimum spanning tree">minimum spanning tree</a> <span class="texhtml mvar" style="font-style:italic;">T</span>
</td></tr>
<tr>
<td><span typeof="mw:File"></span></td>
<td>Calculate the set of vertices <span class="texhtml mvar" style="font-style:italic;">O</span> with odd degree in <span class="texhtml mvar" style="font-style:italic;">T</span>
</td></tr>
<tr>
<td><span typeof="mw:File"></span></td>
<td>Form the subgraph of <span class="texhtml mvar" style="font-style:italic;">G</span> using only the vertices of <span class="texhtml mvar" style="font-style:italic;">O</span>
</td></tr>
<tr>
<td><span typeof="mw:File"></span></td>
<td>Construct a minimum-weight perfect matching <span class="texhtml mvar" style="font-style:italic;">M</span> in this subgraph
</td></tr>
<tr>
<td><span typeof="mw:File"></span></td>
<td>Unite matching and spanning tree <span class="texhtml"><i>T</i> ∪ <i>M</i></span> to form an Eulerian multigraph
</td></tr>
<tr>
<td><span typeof="mw:File"></span></td>
<td>Calculate Euler tour<br><br>Here the tour goes A→B→C→A→D→E→A. Equally valid is A→B→C→A→E→D→A.
</td></tr>
<tr>
<td><span typeof="mw:File"></span></td>
<td>Remove repeated vertices, giving the algorithm's output.<br><br>If the alternate tour would have been used, the shortcut would be going from C to E which results in a shorter route (A→B→C→E→D→A) if this is an euclidean graph as the route A→B→C→D→E→A has intersecting lines which is proven not to be the shortest route.
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Further_developments">Further developments</h2></div>
<p>This algorithm is no longer the best polynomial time approximation algorithm for the TSP on general metric spaces. Karlin, Klein, and Gharan introduced a <a href="Randomized_algorithm" title="Randomized algorithm">randomized</a> approximation algorithm with approximation ratio 1.5&nbsp;−&nbsp;10<sup>−36</sup>. It follows similar principles to Christofides' algorithm, but uses a randomly chosen tree from a carefully chosen random distribution in place of the minimum spanning tree.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> The paper received a best paper award at the 2021 <a href="Symposium_on_Theory_of_Computing" title="Symposium on Theory of Computing">Symposium on Theory of Computing</a>.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
</p><p>In the special case of <a href="Euclidean_space" title="Euclidean space">Euclidean space</a> of dimension <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle d}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>d</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle d}</annotation>
</semantics>
</math></span><img src="./e85ff03cbe0c7341af6b982e47e9f90d235c66ab.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.216ex; height:2.176ex;" alt="{\displaystyle d}" loading="lazy"></span>, for any <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle c>0}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>c</mi>
<mo>&gt;</mo>
<mn>0</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle c&gt;0}</annotation>
</semantics>
</math></span><img src="./2ba126f626d61752f62eaacaf11761a54de4dc84.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:5.268ex; height:2.176ex;" alt="{\displaystyle c>0}" loading="lazy"></span>, there is a polynomial-time algorithm that finds a tour of length at most <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 1+{\tfrac {1}{c}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mn>1</mn>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<mfrac>
<mn>1</mn>
<mi>c</mi>
</mfrac>
</mstyle>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle 1+{\tfrac {1}{c}}}</annotation>
</semantics>
</math></span><img src="./c47894850701331c520a872d7eb4d05c31777514.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:5.661ex; height:3.343ex;" alt="{\displaystyle 1+{\tfrac {1}{c}}}" loading="lazy"></span> times the optimal for geometric instances of TSP in
</p>
<dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O\left(n(\log n)^{(O(c{\sqrt {d}}))^{d-1}}\right)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>O</mi>
<mrow>
<mo>(</mo>
<mrow>
<mi>n</mi>
<mo stretchy="false">(</mo>
<mi>log</mi>
<mo>⁡<!-- ⁡ --></mo>
<mi>n</mi>
<msup>
<mo stretchy="false">)</mo>
<mrow class="MJX-TeXAtom-ORD">
<mo stretchy="false">(</mo>
<mi>O</mi>
<mo stretchy="false">(</mo>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<msqrt>
<mi>d</mi>
</msqrt>
</mrow>
<mo stretchy="false">)</mo>
<msup>
<mo stretchy="false">)</mo>
<mrow class="MJX-TeXAtom-ORD">
<mi>d</mi>
<mo>−<!-- − --></mo>
<mn>1</mn>
</mrow>
</msup>
</mrow>
</msup>
</mrow>
<mo>)</mo>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle O\left(n(\log n)^{(O(c{\sqrt {d}}))^{d-1}}\right)}</annotation>
</semantics>
</math></span><img src="./eac3f29d763f875bddeb2c2fa2b60b7aef76f45e.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.838ex; width:22.447ex; height:4.843ex;" alt="{\displaystyle O\left(n(\log n)^{(O(c{\sqrt {d}}))^{d-1}}\right)}" loading="lazy"></span> time.</dd></dl>
<p>For each constant <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle c}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>c</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle c}</annotation>
</semantics>
</math></span><img src="./86a67b81c2de995bd608d5b2df50cd8cd7d92455.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.007ex; height:1.676ex;" alt="{\displaystyle c}" loading="lazy"></span> this time bound is in <a href="Polynomial_time" class="mw-redirect" title="Polynomial time">polynomial time</a>, so this is called a <a href="Polynomial-time_approximation_scheme" title="Polynomial-time approximation scheme">polynomial-time approximation scheme</a> (PTAS).<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> <a href="Sanjeev_Arora" title="Sanjeev Arora">Sanjeev Arora</a> and <a href="Joseph_S._B._Mitchell" title="Joseph S. B. Mitchell">Joseph S. B. Mitchell</a> were awarded the <a href="G%C3%B6del_Prize" title="Gödel Prize">Gödel Prize</a> in 2010 for their simultaneous discovery of a PTAS for the Euclidean TSP.
</p><p>Methods based on the Christofides–Serdyukov algorithm can also be used to approximate the <a href="Stacker_crane_problem" title="Stacker crane problem">stacker crane problem</a>, a generalization of the TSP in which the input consists of ordered pairs of points from a metric space that must be traversed consecutively and in order. For this problem, it achieves an approximation ratio of 9/5.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-gt-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-gt_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-gt_1-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-gt_1-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFGoodrichTamassia2015" class="citation cs2"><a href="Michael_T._Goodrich" title="Michael T. Goodrich">Goodrich, Michael T.</a>; <a href="Roberto_Tamassia" title="Roberto Tamassia">Tamassia, Roberto</a> (2015), "18.1.2 The Christofides Approximation Algorithm", <i>Algorithm Design and Applications</i>, Wiley, pp.&nbsp;<span class="nowrap">513–</span>514</cite>.</span>
</li>
<li id="cite_note-cri-2"><span class="mw-cite-backlink">^ <a href="#cite_ref-cri_2-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-cri_2-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFChristofides1976" class="citation cs2"><a href="Nicos_Christofides" title="Nicos Christofides">Christofides, Nicos</a> (1976), <a rel="nofollow" class="external text" href="https://apps.dtic.mil/dtic/tr/fulltext/u2/a025602.pdf"><i>Worst-case analysis of a new heuristic for the travelling salesman problem</i></a> <span class="cs1-format">(PDF)</span>, Report 388, Graduate School of Industrial Administration, CMU, <a rel="nofollow" class="external text" href="https://web.archive.org/web/20190721172134/https://apps.dtic.mil/dtic/tr/fulltext/u2/a025602.pdf">archived</a> <span class="cs1-format">(PDF)</span> from the original on July 21, 2019</cite></span>
</li>
<li id="cite_note-vabe-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-vabe_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-vabe_3-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFvan_BevernSlugina2020" class="citation cs2">van Bevern, René; Slugina, Viktoriia A. (2020), "A historical note on the 3/2-approximation algorithm for the metric traveling salesman problem", <i>Historia Mathematica</i>, <b>53</b>: <span class="nowrap">118–</span>127, <a href="ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/2004.02437">2004.02437</a></span>, <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.hm.2020.04.003">10.1016/j.hm.2020.04.003</a>, <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&nbsp;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:214803097">214803097</a></cite></span>
</li>
<li id="cite_note-ser-4"><span class="mw-cite-backlink">^ <a href="#cite_ref-ser_4-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-ser_4-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFSerdyukov1978" class="citation cs2 cs1-prop-foreign-lang-source">Serdyukov, Anatoliy (1978), <a rel="nofollow" class="external text" href="http://nas1.math.nsc.ru/aim/journals/us/us17/us17_007.pdf">"О некоторых экстремальных обходах в графах"</a> [On some extremal walks in graphs] <span class="cs1-format">(PDF)</span>, <i>Upravlyaemye Sistemy (Управляемые системы)</i> (in Russian), <b>17</b>: <span class="nowrap">76–</span>79</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite id="CITEREFBläser2008" class="citation cs2">Bläser, Markus (2008), <a rel="nofollow" class="external text" href="https://books.google.com/books?id=i3S9_GnHZwYC&amp;pg=PA517">"Metric TSP"</a>, in Kao, Ming-Yang (ed.), <i>Encyclopedia of Algorithms}</i>, Springer-Verlag, pp.&nbsp;<span class="nowrap">517–</span>519, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>9780387307701</bdi></cite>.</span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite id="CITEREFKarlinKleinGharan2021" class="citation cs2"><a href="Anna_Karlin" title="Anna Karlin">Karlin, Anna R.</a>; Klein, Nathan; Gharan, Shayan Oveis (2021), "A (slightly) improved approximation algorithm for metric TSP", in Khuller, Samir; <a href="Virginia_Vassilevska_Williams" title="Virginia Vassilevska Williams">Vassilevska Williams, Virginia</a> (eds.), <i>STOC '21: 53rd Annual ACM SIGACT Symposium on Theory of Computing, Virtual Event, Italy, June 21-25, 2021</i>, Association for Computing Machinery, pp.&nbsp;<span class="nowrap">32–</span>45, <a href="ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/2007.01409">2007.01409</a></span>, <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F3406325.3451009">10.1145/3406325.3451009</a>, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-1-4503-8053-9</bdi></cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite id="CITEREFKlarreich2020" class="citation cs2"><a href="Erica_Klarreich" title="Erica Klarreich">Klarreich, Erica</a> (8 October 2020), <a rel="nofollow" class="external text" href="https://www.quantamagazine.org/computer-scientists-break-traveling-salesperson-record-20201008/">"Computer Scientists Break Traveling Salesperson Record"</a>, <i>Quanta Magazine</i><span class="reference-accessdate">, retrieved <span class="nowrap">2020-10-10</span></span></cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite class="citation cs2"><a rel="nofollow" class="external text" href="https://www.sigact.org/prizes/best_paper.html">"ACM SIGACT - STOC Best Paper Award"</a>, <i>www.sigact.org</i><span class="reference-accessdate">, retrieved <span class="nowrap">2022-04-20</span></span></cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text">Sanjeev Arora, Polynomial-time Approximation Schemes for Euclidean TSP and other Geometric Problems, Journal of the ACM 45(5) 753–782, 1998.</span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><cite id="CITEREFFredericksonHechtKim1978" class="citation cs2">Frederickson, Greg N.; Hecht, Matthew S.; Kim, Chul E. (1978), "Approximation algorithms for some routing problems", <i><a href="SIAM_Journal_on_Computing" title="SIAM Journal on Computing">SIAM Journal on Computing</a></i>, <b>7</b> (2): <span class="nowrap">178–</span>193, <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1137%2F0207017">10.1137/0207017</a>, <a href="MR_(identifier)" class="mw-redirect" title="MR (identifier)">MR</a>&nbsp;<a rel="nofollow" class="external text" href="https://mathscinet.ams.org/mathscinet-getitem?mr=0489787">0489787</a></cite></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://xlinux.nist.gov/dads/HTML/christofides.html">NIST Christofides Algorithm Definition</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-07-16" href="https://en.wikipedia.org/wiki/?title=Christofides_algorithm&amp;oldid=1300833223">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>